package com.exam.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 动态代理机制
 * 
 * @author MuLing
 * 
 */
public class DynamicProxyUtil implements InvocationHandler {

	private Object obj;// 真实主题

	public Object bindProxy(Object obj) {// 绑定真实存在主题
		this.obj = obj;
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
				.getClass().getInterfaces(), this);// 取得代理对象
	}

	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {// 动态调用方法
		System.out.println("开始执行" + method.getName() + "方法");
		Object temp = null;
		try {
			System.out.println("参数：");
			for (Object object : args) {
				System.out.print("\t" + object);
			}
			System.out.println();
			System.out.println(this.obj);
			temp = method.invoke(this.obj, args);// 调用方法，传入真实主题参数
			System.out.println(method.getName() + "方法执行成功");

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(method.getName() + "方法执行出错");
			throw e;
		}
		System.out.println(method.getName() + "方法执行结束");
		return temp;
	}
}
